﻿/*---------------------------------------------------------------------------------------
使用Ajax无刷新提交表单
使用些模块必需加域Ajax模块

使用方法: var ajax=new Ajax(url,data,onload,onerror)
参数说明:
		url:处理页面的路径
		data:传递过去的数据 表示格式： id=1243&page=2  中文，特殊字符请用escape(String)处理
		onload;处理成功后的处理函数
		onerror:失败后的处理函数，可省略
另有两个返回字段。
ajax.responseText 处理成功后将返回从处理页面传递过来的字符串
ajax.responseXML 处理成功后将返回从处理页面传递过来的XML

* 作者：舒彩光
* 创作时间：2006-12-30
* 完成时间：2006-12-31
* 第一次修改时间：无
* 修改目的及内容：无
*
*  本程式在IE、firfox中测试均通过。
*		如果存在BUG，或在功能上有不完善之处请用QQ联系；QQ：327285304


----------------------------------------------------------------------------------------*/

var AjaxState=new Object();
AjaxState.UNINIT=0;
AjaxState.LOADING=1;
AjaxState.LOADED=2;
AjaxState.INTERACTIVE=3;
AjaxState.COMPLETE=4;

//创建XMLHTTP对象
function createXMLHTTP(){
	if(window.XMLHttpRequest){
		var XMLHttp=new window.XMLHttpRequest();
		//XMLHttp.overrideMimeType("text/xml");
		return XMLHttp;
	}
	else if(window.ActiveXObject){
		var XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
		return XMLHttp;
	}
}

//构造函数
//凋用方法
//new Ajax()
//new Ajax(url,date,onload)
//new Ajax(url,date,onload,onerror)
function Ajax(url,data,onload,onerror){
	//输入值
	this.url=url;
	this.data=data;
	this.onload=onload;
	this.onerror=(onerror)?onerror:this.defaultError;

	//输出值
	this.responseText=null;
	this.responseXML=null;
	this.XMLHttp=createXMLHTTP();
	//操作
	this.loadDoc()
}

//队列
Ajax._________AjaxQueue=[];

//是否在处理
Ajax._________Process=false;


//真正的处理程序，按队列处理
Ajax._______send=function(info){
	Ajax._________Process=true;//表示正在工作
	try{

	    var url=info.url;
	    info.XMLHttp.open("POST",url,true);
	    info.XMLHttp.onreadystatechange=function(){info.readyState();}
	    //EventOperate.addEvents=EventOperate.addEvents(info.XMLHttp,info._xmlHttpAction);
	    info.XMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	    info.XMLHttp.send(info.data);
    }catch(en){
		info.onerror();
	}
    //执行队列中的下一人任务
    if(Ajax._________AjaxQueue.length>0) Ajax._______send(Ajax._________AjaxQueue.shift());
    else Ajax._________Process=false;//表示工作结束
}

Ajax.prototype.loadDoc=function(){
//	var data=this.data;
//	oThis=this;
//	try{
//		this.XMLHttp=createXMLHTTP();
//		this.XMLHttp.open("POST",this.url,true);
//		this.XMLHttp.onreadystatechange=function(){oThis.readyState();}
//		this.XMLHttp.setRequestHeader("Content-Type", "application/json");
//		this.XMLHttp.send(data);
//	}catch(e){
//		this.onerror();
//	}

	//将任务加入队列
	Ajax._________AjaxQueue.push(this);
	if (Ajax._________Process == false) {//如果没有启动工作，则启动工作
		Ajax._________Process = true;
		Ajax._______send(Ajax._________AjaxQueue.shift());
	}
}

Ajax.prototype.readyState=function(){
	if(this.XMLHttp.readyState==AjaxState.COMPLETE){
		if(this.XMLHttp.status==200 || this.XMLHttp.status==0){
			this.responseText=this.XMLHttp.responseText;
			this.responseXML=this.XMLHttp.responseXML;
			this.onload();
		}else{
			this.onerror();
		}
	}
}

Ajax.prototype.getResponseJOSN=function(){
	return (new Function("return "+this.responseText))();
}

Ajax.prototype.defaultError=function(){
	alert("程序处理错误！"+
		"\n处理状态:"+this.XMLHttp.readyState+
		"\n服务器状态:"+this.XMLHttp.status +" ["+this.XMLHttp.statusText+"]"+
		"\n文件头信息:"+this.XMLHttp.getAllResponseHeaders()+"")
}

